package com.shxzz.shortlink.project.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.shxzz.shortlink.project.dao.entity.LinkDO;
import com.shxzz.shortlink.project.dto.biz.LinkAccessInfoDTO;
import com.shxzz.shortlink.project.dto.req.LinkCreateReqDTO;
import com.shxzz.shortlink.project.dto.req.LinkPageReqDTO;
import com.shxzz.shortlink.project.dto.req.LinkUpdateReqDTO;
import com.shxzz.shortlink.project.dto.resp.LinkCreateRespDTO;
import com.shxzz.shortlink.project.dto.resp.LinkGroupCountRespDTO;
import com.shxzz.shortlink.project.dto.resp.LinkPageRespDTO;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;

import java.util.List;

/**
 * @author shxzz
 * @create 2023-12-17-16:15
 * @description 短链接接口层
 */
public interface LinkService extends IService<LinkDO> {
    /**
     * 生成短链接
     * @param requireParam 短链接生成请求参数
     * @return 短链接生成信息
     */
    LinkCreateRespDTO createLink(LinkCreateReqDTO requireParam);

    /**
     * 分页查询短链接
     * @param requireParam 分页查询请求参数
     * @return 分页查询结果
     */
    IPage<LinkPageRespDTO> selectPageLink(LinkPageReqDTO requireParam);

    /**
     * 短链接信息修改
     * @param requireParam 短链接信息修改请求参数
     */
    void updateLink(LinkUpdateReqDTO requireParam);

    /**
     * 短链接组内数量查询
     *
     * @param gids 查询分组 id 列表
     * @return 短链接组内数量统计结果
     */
    List<LinkGroupCountRespDTO> selectLinkGroupCount(List<String> gids);

    /**
     * 短链接跳转
     * @param shortUri 短链接
     */
    void restoreUrl(String shortUri, HttpServletRequest request,HttpServletResponse response);

    /**
     * 保存短链接访问信息
     */
    void saveLinkAccessInfo(LinkAccessInfoDTO linkAccessInfoDTO);
}
